#pragma once
#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
/**
 * 封装
 * 1.负责 tongsuo/openssl 库的初始化
 * 2.上下文创建
 * 3.加载证书和私钥
 * 4.释放对应资源
 */



class TLSContext {
public:
    //角色
    enum class Role { Server, Client };

    //根据不同角色操作不同
    TLSContext(Role role, const std::string& certFile, const std::string& keyFile);
    ~TLSContext();

    //获取SSL上下文
    SSL_CTX* get() const;
private:
    void loadEngine(const std::string& engine_id);
    bool loadDynamicEngine(const std::string& so_path, const std::string& engine_id);

private:
    SSL_CTX* ctx_;   //上下文
    ENGINE* engine_; //引擎句柄
};
